package com.fy.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fy.pojo.dto.file.FileQueryDTO;
import com.fy.pojo.dto.file.RenameFileDTO;
import com.fy.pojo.dto.file.UploadFileDTO;
import com.fy.pojo.entity.FileInfo;
import com.fy.pojo.vo.file.FoloderVO;
import com.fy.pojo.vo.user.LoginUserVO;
import com.fy.pojo.vo.file.FileStatisticsVO;
import com.fy.utils.result.PageResult;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;
import java.util.List;

public interface FileInfoService extends IService<FileInfo> {
    /**
     * 定期检查数据库文件回收站情况并执行永久删除操作
     *
     */

    void schedulDelRecoverFile();

    /**
     * 文件上传
     *
     * @param loginUserVO
     * @param uploadFileDTO
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    String uploadFile(LoginUserVO loginUserVO, UploadFileDTO uploadFileDTO) throws IOException;

    /**
     * 文件分页查询
     *
     * @param fileQueryDTO
     * @return
     */
    PageResult filePageQuery(FileQueryDTO fileQueryDTO, LoginUserVO loginUserVO);

    /**
     * 文件删除
     *
     * @param fileIdList
     */
    void delFile(List<String> fileIdList);

    /**
     * 文件重命名
     *
     * @param renameFileDTO
     * @return
     */
    void rename(RenameFileDTO renameFileDTO);

    /**
     * 创建文件下载路径
     *
     * @param fileId
     */
    String createDownloadURL(String fileId);

    /**
     * 创建文件夹
     *
     * @param filePid
     * @param fileName
     * @param loginUserVO
     * @return
     */
    FileInfo newFoloder(String filePid, String fileName, LoginUserVO loginUserVO);

    /**
     * 获取文件夹信息
     *
     * @param fileId
     * @return
     */
    List<FoloderVO> getFoloderInfo(String fileId);

    /**
     * 获取文件夹
     *
     * @param filePid
     * @param currentFileIds
     * @return
     */
    List<FileInfo> loadAllFolder(LoginUserVO loginUserVO, String filePid, String currentFileIds);

    /**
     * 移动文件
     *
     * @param fileIds
     * @param filePid
     */
    void changeFileFolder(String fileIds, String filePid);

    /**
     * 获取文件路径
     *
     * @param fileId
     * @return
     */
    FileInfo getFilePath(String fileId);

    /**
     * 获取文件统计信息
     *
     * @param id
     * @return
     */
    FileStatisticsVO getFileStatistics(Integer id);
}
